#include <iostream>
#include "compile_runner.hpp"
#include "../comm/httplib.h"

using namespace ns_com_and_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}

int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        Usage(argv[0]);
        return 1;
    }
    Server svr;

    // svr.Get("/hello", [](const Request &req, Response &resp)
    //         {
    //     // 用来进行基本测试
    //     resp.set_content("hello httplib,你好 httplib!", "text/plain;charset=utf-8"); });

        svr.Post("/complie_and_run",[](const Request &req, Response &resp){
            //用户请求的正文就是我们的json串
            string in_json;
            in_json=req.body;
            string out_json;
            if(!in_json.empty())
            {
                cout<<"开始编译...."<<endl;
            ComAndRun::start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf-8");
            }
            ;});

    svr.listen("0.0.0.0", atoi(argv[1]));//用来基本测试http

    // //通过http进行传送
    // // in_json: {"code": "#include...", "input": "","cpu_limit":1, "mem_limit":10240}
    // // out_json: {"status":"0", "reason":"","stdout":"","stderr":"",}
    // Json::Value in_value;
    // string in_json;
    // in_value["code"]=R"(#include<iostream>
    // int main()
    // {
    //     std::cout<<"你好"<<std::endl;
    //      //int *p=new int[1024*1024*50];
    //     //while(1);
    //     return 0;
    // })";
    // in_value["input"]="";
    // in_value["cpu_lim"]=1;
    // in_value["mem_lim"]=10240*3;

    // Json::FastWriter writer;
    // in_json=writer.write(in_value);
    // cout<<in_value<<endl;
    // string out_json;
    // ComAndRun::start(in_json,&out_json);
    // cout<<out_json<<endl;

    // 提供的编译服务，打包形成一个网络服务
    // cpp-httplib

    // in_json: {"code": "#include...", "input": "","cpu_limit":1, "mem_limit":10240}
    // out_json: {"status":"0", "reason":"","stdout":"","stderr":"",}
    // 通过http 让client 给我们 上传一个json string
    // 下面的工作，充当客户端请求的json串
    // std::string in_json;
    // Json::Value in_value;
    // //R"()", raw string
    // in_value["code"] = R"(#include<iostream>
    // int main(){
    //     std::cout << "你可以看见我了" << std::endl;
    //     aaaaaaaa
    //     return 0;
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240*3;
    // Json::FastWriter writer;
    // in_json = writer.write(in_value);
    // std::cout << in_json << std::endl;
    // //这个是将来给客户端返回的json串
    // std::string out_json;
    // ComAndRun::start(in_json, &out_json);

    // std::cout << out_json << std::endl;
    return 0;
}